package model.comunication;

import java.util.ArrayList;
import java.util.List;

import model.Area;
import model.dba.AreaDAO;

public class IArea {
	private AreaDAO areaDAO;
	private static IArea areaInterface;

	private IArea() {
		areaDAO = AreaDAO.getInstance();
	}

	public static IArea getInstance() {
		if (areaInterface == null) {
			areaInterface = new IArea();
		}
		return areaInterface;
	}

	/**
	 * Crea el objeto
	 * 
	 * @param id
	 * @param nombre
	 * @return
	 */
	public Area getArea(Integer id, String nombre) {
		return new Area(id, nombre);
	}

	/**
	 * Crea el objeto
	 * 
	 * @param nombre
	 * @return
	 */
	public Area getArea(String nombre) {
		return new Area(nombre);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
//	public List<Area> findArea(String nombre) {
//		return this.areaDAO.find(nombre);
//	}
	
	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public Area findArea(String nombre) {
		return this.areaDAO.find(nombre);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public Area getArea(Integer id) {
		return this.areaDAO.get(id);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @return
	 */
	public List<Area> getAllAreas() {
		return this.areaDAO.getAll();
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param ids
	 * @return
	 */
	public List<Area> getSelectedAreas(Integer... ids) {// VER por exception
		List<Area> idList = new ArrayList<Area>();

		for (Integer id : ids) {
			idList.add(this.areaDAO.get(id));
		}
		return idList;
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param area
	 * @return
	 */
	public Integer addArea(Area area) {
		return this.areaDAO.add(area);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param id
	 * @return
	 */
	public boolean deleteArea(Integer id) {
		return this.areaDAO.delete(id);
	}

	/**
	 * Va contra la base de datos y obtiene el objeto
	 * 
	 * @param area
	 * @return
	 */
	public boolean updateArea(Area area) {
		return this.areaDAO.update(area);
	}

}
